IaCで管理するLambdaで更新時に古いバージョンを削除する方法

IaCで管理するLambdaで更新時に古いバージョンを削除する方法

Clock Icon2024.11.22

こんばんは、製造ビジネステクノロジー部の夏目です。

先日AWS LambdaでPythonと.NetのSnapStartが発表されました。
調べてみるとSnapStartはバージョンをキャッシュするものであり、キャッシュしているバージョンに対して課金されるものでした。

なので、今回は最新のバージョン以外を削除するようにIaCで設定する方法について調べました。

SAM (Serverless Application Model)の場合

Transform: AWS::Serverless-2016-10-31

Resources:
  Function:
    Type: AWS::Serverless::Function
    DeletionPolicy: Delete
    Properties:
      AutoPublishAlias: prod
      ...

SAMの場合、AutoPublishAliasに設定したいAliasの名前を記載することで自動的にバージョンが発行されAliasが設定されます。

Propertyとしてバージョンの削除の設定はないが、リソースに対して DeletionPolicy: Deleteを設定することで更新の際に古いバージョンを削除することができる。

CDK (Cloud Development Kit)の場合

import * as cdk from "aws-cdk-lib";
import * as lambda from "aws-cdk-lib/aws-lambda";
import { Construct } from "constructs";
import * as path from "node:path";

export class CdkLatestVersionOnlyStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const myFunction = new lambda.Function(this, "cdk-latest-version", {
      runtime: lambda.Runtime.PYTHON_3_13,
      handler: "main.handler",
      code: lambda.Code.fromAsset(path.join(__dirname, "../src")),
      currentVersionOptions: {
        removalPolicy: cdk.RemovalPolicy.DESTROY,
      },
    });
    myFunction.addAlias("prod");
  }
}

CDKではcurrentVersionOptionremovalPolicy: cdk.RemovalPolicy.DESTROYを設定することで古いバージョンを削除してくれるようになる。

なお、Aliasを設定したい場合には addAlias("<Alias名>")を実行する必要がある。

Terraformの場合

残念ながらTerraformではバージョン発行時に古いバージョンを削除できるようなオプションを見つけることができなかった。

まとめ

以上、更新時に古い方のバージョンを消す方法についてでした。
何かのお役に立てれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.